package day07;

// 变为Fibonacci数列的最小步数

import java.util.Scanner;

// 再写一次：尤其要注意循环条件（也就是：找L与R的过程！！）
public class Main1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()) {
            int n = in.nextInt();
            // 使用迭代计算Fibonacci
            // 注意初始值，否则可能会出现负数的情况
            int f1 = 1;
            int f2 = 1;
            int f3 = 2;
            while (n > f3) {
                // 开始进行变换继续计算Fibonacci
                f1 = f2;
                f2 = f3;
                f3 = f1+f2;
            }
            // 出来说明：n<=f3，此时：
            // f2 < n <=f3
            // 然后计算f2、f3与n的差值，取最小值就是步数
            int step = Math.min(n-f2,f3-n);
            System.out.println(step);
        }
    }
}



// 也是可以通过的正确版本
//import java.util.Scanner;
//
//public class Main1 {
//    public static void main(String[] args) {
//
//        //System.out.println(Math.round(11.5)); // 测试Math.round() 四舍五入！！
//
//        Scanner in = new Scanner(System.in);
//        while (in.hasNextInt()) {
//            int N = in.nextInt();
//            int f1 = 0;
//            int f2 = 1; // Fib前两个数字
//            int f3 = -1; // 不使用数组存储，而是变换
//            while(f3<N) {
//                f3 = f1+f2;
//                // 判断f3的情况来判断变不变f1 f2
//                if(f3>=N) {
//                    break;
//                }
//                f1 = f2;
//                f2 = f3;
//            }
//            // 来进行两边距离比较
//            if(Math.abs(f3-N) > Math.abs(N-f2)) {
//                System.out.println(Math.abs(N-f2));
//            } else {
//                System.out.println(Math.abs(f3-N));
//            }
//        }
//
//    }
//}
